// 取消重复请求

import Axios from 'axios'
import { getPendingKey } from './utils'

// addPending：用于把当前请求信息添加到pendingMap对象 中；
const pendingMap = new Map() // Map对象保存键值对。任何值(对象或者原始值) 都可以作为一个键或一个值。

export function addPending (config) {
  const pendingKey = getPendingKey(config)

  if (!pendingMap.has(pendingKey)) {
    config.cancelToken = config.cancelToken || new Axios.CancelToken(cancel => {
      pendingMap.set(pendingKey, cancel)
    })
  }
}

/**
 * 删除重复的请求
 * @param {*} config
 */
export function removePending (config) {
  const pendingKey = getPendingKey(config)
  if (pendingMap.has(pendingKey)) {
    const cancelToken = pendingMap.get(pendingKey)

    cancelToken(pendingKey)

    pendingMap.delete(pendingKey)
  }
}

export const clearPendingMap = () => {
  pendingMap && pendingMap.clear()
}